package com.abc.example.dao;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.abc.example.entity.User;


/**
 * @className	: UserDao
 * @description	: 用户对象数据访问类
 * @summary		: 主数据表：exa_users
 * @history		: 
 * ------------------------------------------------------------------------------
 * date			version		modifier		remarks
 * ------------------------------------------------------------------------------
 * 2023/05/17	1.0.0		sheng.zheng		初版
 *
 */
@Mapper
public interface UserDao {
	/**
	 * @methodName	: insertItem
	 * @description	: 新增一个用户对象
	 * @param item	: 用户对象
	 * @return		: 受影响的记录数
	 * @history		: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public int insertItem(User item);

	/**
	 * @methodName		: insertItems
	 * @description		: 新增一批用户对象
	 * @param itemList	: 用户对象列表
	 * @return			: 受影响的记录数
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public int insertItems(List<User> itemList);

	/**
	 * @methodName		: updateItemByKey
	 * @description		: 根据key修改一个用户对象
	 * @param params	: 用户对象相关字段字典，至少需要一个修改字段，修改字段均可选；key字段必选：
	 * 	{
	 * 		"userId": 0L,	// 用户ID，必选
	 * 	}
	 * @return			: 受影响的记录数
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public int updateItemByKey(Map<String, Object> params);

	/**
	 * @methodName		: updateItems
	 * @description		: 根据条件批量修改用户对象的相关属性字段的值
	 * @param params	: 用户对象相关字段字典，至少需要一个修改字段和一个条件字段，修改字段和条件字段均可选；
	 * 	{
	 * 					  修改字段集如下：
	 * 		"orgId"			: 0,	// 组织机构ID，可选
	 * 		"userType"		: 3,	// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"deleteFlag"	: 0,	// 记录删除标记，0-正常、1-禁用，可选
	 * 		"operatorName"	: "",	// 操作人账号，可选
	 * 					  条件字段如下：
	 * 		"userIdList"	: [],	// 用户ID列表，list，可选
	 * 		"userName"		: "",	// 用户名，可选
	 * 		"phoneNumber"	: "",	// 手机号码，可选
	 * 	}
	 * @return			: 受影响的记录数
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public int updateItems(Map<String, Object> params);

	/**
	 * @methodName	: selectItemByKey
	 * @description	: 根据key查询一个用户对象
	 * @param userId: 用户ID
	 * @return		: 用户对象
	 * @history		: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User selectItemByKey(@Param("userId") Long userId);

	/**
	 * @methodName		: selectItems
	 * @description		: 根据条件查询用户对象列表，用于前端和内部查询记录
	 * @param params	: 查询条件参数，形式如下：
	 * 	{
	 * 		"offset"			: 0,			// limit记录偏移量，可选
	 * 		"rows"				: 20,			// limit最大记录条数，可选
	 * 		"sortList"			: [],			// 排序选项，SortField对象列表，只支持数据表字段属性，可选
	 * 		"userId"			: "0",			// 用户ID，可选
	 * 		"userIdList"		: [],			// 用户ID列表，list，可选
	 * 		"userName"			: "",			// 用户名，可选
	 * 		"userNameLike"		: "",			// 用户名，like，可选
	 * 		"userType"			: 3,			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"userTypeList"		: [],			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户列表，list，可选
	 * 		"sex"				: 1,			// 性别，1-无值、2-男、3-女、4-其它，可选
	 * 		"deleteFlag"		: 0,			// 记录删除标记，0-正常、1-禁用，可选
	 * 		"phoneNumber"		: "",			// 手机号码，可选
	 * 		"phoneNumberLike"	: "",			// 手机号码，like，可选
	 * 		"realNameLike"		: "",			// 真实姓名，like，可选
	 * 		"email"				: "",			// Email，可选
	 * 		"emailLike"			: "",			// Email，like，可选
	 * 		"birthGte"			: "yyyy-MM-dd",	// 生日起始值，gte，可选
	 * 		"birthLte"			: "yyyy-MM-dd",	// 生日终止值，lte，可选
	 * 		"orgId"				: 0,			// 组织机构ID，可选
	 * 		"orgIdList"			: [],			// 组织机构ID列表，list，可选
	 * 		"openId"			: "",			// 微信小程序的openid，可选
	 * 		"woaOpenid"			: "",			// 微信公众号openid，可选
	 * 	}
	 * @return			: 用户对象列表
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public List<User> selectItems(Map<String, Object> params);

	/**
	 * 
	 * @methodName		: selectCount
	 * @description		: 查询符合查询条件的记录数
	 * @param params	: 查询条件参数，形式如下：
	 * 	{
	 * 		"userId"			: "0",			// 用户ID，可选
	 * 		"userIdList"		: [],			// 用户ID列表，list，可选
	 * 		"userName"			: "",			// 用户名，可选
	 * 		"userNameLike"		: "",			// 用户名，like，可选
	 * 		"userType"			: 3,			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户，可选
	 * 		"userTypeList"		: [],			// 用户类型，1-系统管理员、2-公司内部用户、3-外部用户列表，list，可选
	 * 		"sex"				: 1,			// 性别，1-无值、2-男、3-女、4-其它，可选
	 * 		"deleteFlag"		: 0,			// 记录删除标记，0-正常、1-禁用，可选
	 * 		"phoneNumber"		: "",			// 手机号码，可选
	 * 		"phoneNumberLike"	: "",			// 手机号码，like，可选
	 * 		"realNameLike"		: "",			// 真实姓名，like，可选
	 * 		"email"				: "",			// Email，可选
	 * 		"emailLike"			: "",			// Email，like，可选
	 * 		"birthGte"			: "yyyy-MM-dd",	// 生日起始值，gte，可选
	 * 		"birthLte"			: "yyyy-MM-dd",	// 生日终止值，lte，可选
	 * 		"orgId"				: 0,			// 组织机构ID，可选
	 * 		"orgIdList"			: [],			// 组织机构ID列表，list，可选
	 * 		"openId"			: "",			// 微信小程序的openid，可选
	 * 		"woaOpenid"			: "",			// 微信公众号openid，可选
	 * 	}	 
	 * @return		: 记录数
	 * @history		: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks                   
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public Integer selectCount(Map<String, Object> params);	

	/**
	 * @methodName		: selectItemByUserName
	 * @description		: 根据userName查询用户对象
	 * @param userName	: 用户名
	 * @return			: 用户对象
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User selectItemByUserName(@Param("userName") String userName);		

	/**
	 * @methodName			: selectItemByPhoneNumber
	 * @description			: 根据phoneNumber查询用户对象
	 * @param phoneNumber	: 手机号码
	 * @return				: 用户对象
	 * @history				: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User selectItemByPhoneNumber(@Param("phoneNumber") String phoneNumber);		

	/**
	 * @methodName	: selectItemByIdNo
	 * @description	: 根据idNo查询用户对象
	 * @param idNo	: 身份证号码
	 * @return		: 用户对象
	 * @history		: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User selectItemByIdNo(@Param("idNo") String idNo);		

	/**
	 * @methodName	: selectItemByOpenId
	 * @description	: 根据openId查询用户对象
	 * @param openId: 微信小程序的openid
	 * @return		: 用户对象
	 * @history		: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User selectItemByOpenId(@Param("openId") String openId);		

	/**
	 * @methodName		: selectItemByWoaOpenid
	 * @description		: 根据woaOpenid查询用户对象
	 * @param woaOpenid	: 微信公众号openid
	 * @return			: 用户对象
	 * @history			: 
	 * ------------------------------------------------------------------------------
	 * date			version		modifier		remarks
	 * ------------------------------------------------------------------------------
	 * 2023/05/17	1.0.0		sheng.zheng		初版
	 *
	 */
	public User selectItemByWoaOpenid(@Param("woaOpenid") String woaOpenid);		

}